package com.ishitong.platform.utils;

import java.util.Date;
import java.util.Calendar;
import java.sql.Timestamp;

/**
 * 格式化日期，从字符串产生日期，从日期产生字符串
 */
public class DateFormater {
	/**
	 * * 将日期转化为字符串。 字符串格式("YYYY-MM-DD")，小时、分、秒被忽略。
	 */
	public static String DateToString(Date date) {
		java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat("yyyy-MM-dd");
		String strDateTime = "";
		if (date != null) {
			strDateTime = formater.format(date);
		}
		return strDateTime;
	}

	/**
	 * * 将日期转化为字符串。
	 * 
	 * @param Date
	 *            日期
	 * @param pattern
	 *            日期格式
	 * @return String 类型
	 */
	public static String DateToString(Date date, String pattern) throws Exception {
		String strDateTime = null;
		try {
			java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(pattern);
			strDateTime = formater.format(date);
		} catch (Exception ex) {
			throw ex;
		}
		return strDateTime;
	}

	/**
	 * 将传入的年月日转化为Date类型
	 * 
	 * @param year
	 *            年
	 * @param month
	 *            月
	 * @param day
	 *            日
	 * @return Date类型
	 */
	public static Date YmdToDate(int year, int month, int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(year, month, day);
		return calendar.getTime();
	}

	/**
	 * 将日期转化为字符串。 字符串格式("YYYY-MM-DD")，小时、分、秒被忽略。
	 */
	public static String communityDateToString(Date date) {
		java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat("MM/dd HH:mm:ss");
		String strDateTime = formater.format(date);
		return strDateTime;
	}

	/**
	 * 将字符串转化为日期。 字符串格式("YYYY-MM-DD")。
	 * 例如："2002-07-01"或者"2002-7-1"或者"2002-7-01"或者"2002-07-1"是等价的。
	 */
	public static Date StringToDate(String str) {
		Date dateTime = null;
		try {
			if (!(str == null || str.equals(""))) {
				java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat("yyyy-MM-dd");
				dateTime = formater.parse(str);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}

		return dateTime;

	}

	/**
	 * 将字符串转化为日期。 字符串格式("YYYY-MM-DD")。
	 * 例如："2002-07-01"或者"2002-7-1"或者"2002-7-01"或者"2002-07-1"是等价的。
	 */
	public static Date StringToDate(String str, String pattern) {
		Date dateTime = null;
		try {
			if (!(str == null || str.equals(""))) {
				java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(pattern);
				dateTime = formater.parse(str);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}

		return dateTime;

	}

	/**
	 * 日期时间带时分秒的Timestamp表示
	 * 
	 * @return Timestamp
	 */
	public static Timestamp StringToDateHMS(String str) throws Exception {
		Timestamp time = null;
		try {
			time = java.sql.Timestamp.valueOf(str);
		} catch (Exception ex) {
			ex.printStackTrace();
			throw ex;
		}

		return time;

	}

	/**
	 * 取得一个date对象对应的日期的0点0分0秒时刻的Date对象。
	 * 
	 * @param date
	 *            一个日期
	 * @return Date对象。
	 */
	public static Date getMinDateOfDay(Date date) {
		if (date == null) {
			return null;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMinimum(Calendar.HOUR_OF_DAY));
		calendar.set(Calendar.MINUTE, calendar.getActualMinimum(Calendar.MINUTE));
		calendar.set(Calendar.SECOND, calendar.getActualMinimum(Calendar.SECOND));
		calendar.set(Calendar.MILLISECOND, calendar.getActualMinimum(Calendar.MILLISECOND));

		return calendar.getTime();
	}

	/**
	 * 取得一个date对象对应的日期的23点59分59秒时刻的Date对象。
	 * 
	 * @param date
	 *            一个日期
	 * @return Date对象。
	 */
	public static Date getMaxDateOfDay(Date date) {
		if (date == null) {
			return null;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
		calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
		calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
		calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));

		return calendar.getTime();
	}

}